/*
 * JavaScript code For Login
 * 
 * @author : VIPArcher
 * @Email : VIPArcher@sina.com
 * @date : 20170527
 *
 *  Copyright 2017 VIPArcher
 */

define(function(require,exports,module){

    require("jquery");
    require("bootstrap");
    require("global");
    require("jform");
    var md5 = require("md5");

    (function($){
        $.fn.extend({
            /* 重置验证码发送按钮 */
            rewire: function (time){
                var $this = $(this);
                var time = time || 60;
                time -= 1;
                if (time == 0) {
                    $this.removeAttr("disabled");
                    $this.html("获取验证码");
                } else {
                    $this.prop("disabled", true);
                    $this.html("重新发送（{0}）".format(time));
                    setTimeout(function() { $this.rewire(time) }, 1000);
                }
            },
            validateNull : function() { //验证是空 0-验证成功 1-内容为空
                var value = $(this).val();
                if(value == '') {
                    return 1 ;
                } else {
                    return 0;
                }
            },
            /*
             * 验证手机号码
             *
             * @return 0,1,2,3
             *		0:验证成功; 1:内容为空;  2长度不为11位; 3:格式不对。
             */
            validatemobile: function (){
                var num = $(this).val();
                if (num.length == 0) {
                    $(this)[0].focus();
                    return 1;
                } else if (num.length != 11) {
                    $(this)[0].focus();
                    return 2;
                } else {
                    var reg = /^(((13[0-9]{1})|(15[0-9]{1})|(18[0-9]{1}))+\d{8})$/;
                    if(!reg.test(num)) {
                        $(this)[0].focus();
                        return 3;
                    } else {
                        return 0;
                    }
                }
            },
            /*
             * 验证密码 $phone 被验证的输入框jQ对象
             * 字母+数字，字母+特殊字符，数字+特殊字符，至少6位
             * @return 0,1,2,3
             *		0:验证成功; 1:内容为空; 2:长度过短; 3:格式不对。
             */
            validatepwd: function (){
                var num = $(this).val();
                if (num.length == 0) {
                    $(this)[0].focus();
                    return 1
                } else if (num.length < 6) {
                    $(this)[0].focus();
                    return 2
                } else {
                    var  reg = /^(?![a-zA-z]+$)(?!\d+$)(?![!@#$%^&*]+$)[a-zA-Z\d!@#$%^&*]+$/;
                    if(!reg.test(num)) {
                        $(this)[0].focus();
                        return 3;
                    } else {
                        return 0;
                    }
                }
            },

        });
    })(jQuery);
    $(document).ready(function() {
        // 隐藏/显示密码切换
        $('.pwd-toggle').on('click',function() {
            var icon = $(this).find('.glyphicon');
            if (icon.hasClass('glyphicon-eye-open')) {
                $(this).attr("title", "隐藏密码").siblings('input').prop('type', 'text');
                icon.removeClass('glyphicon-eye-open').addClass('glyphicon-eye-close');
            } else if (icon.hasClass('glyphicon-eye-close')) {
                $(this).attr("title", "显示密码").siblings('input').prop('type', 'password');
                icon.removeClass('glyphicon-eye-close').addClass('glyphicon-eye-open');
            }
        })
        $('#register').click(function() {$('.login').fadeOut(150,function() {$('.register').fadeIn(150)})});
        $('#resetpwd').click(function() {$('.login').fadeOut(150,function() {$('.resetpwd').fadeIn(150)})});
        $('#reglogin').click(function() {$('.register').fadeOut(150,function() {$('.login').fadeIn(150)})});
        $('#pwdlogin').click(function() {$('.resetpwd').fadeOut(150,function() {$('.login').fadeIn(150)})});

        // 判断直接进入哪个页面 例如 login.php?p=register
        switch($.getUrlParam('p')) {
            case 'register': $('.register').show(); break;
            case 'resetpwd': $('.resetpwd').show(); break;
            default: $('.login').show();
        };
        // 发送验证码事件
        $('.getsms').click(function() {
            var phone = $(this).parents('form').find('input.phone');
            var error = $(this).parents('form').find('.error_msg');
            switch(phone.validatemobile()) {
                case 0:
                    // 短信验证码的php请求
                    error.html(_l.msgTemp('验证码 <strong>已发送</strong>','alert-success'));
                    $(this).rewire(60);
                    break;
                case 1: error.html(_l.msgTemp('<strong>手机号码为空</strong> 请输入手机号码',    'alert-warning')); break;
                case 2: error.html(_l.msgTemp('<strong>手机号码错误</strong> 请输入11位数的号码','alert-warning')); break;
                case 3: error.html(_l.msgTemp('<strong>手机号码错误</strong> 请输入正确的号码',  'alert-warning')); break;
            }
        });

        $("#register_submit").on("click",function () {
            var form = $(this).parents('form') ;
            var options = {
                success: function (data) {
                   if(data.success) {
                       $('.register').fadeOut(150,function() {$('.login').fadeIn(150)})
                       form.clearForm()
                   } else {
                       var error = form.find('.error_msg');
                       error.html(_l.msgTemp('<strong>账号错误</strong> '+data.message , 'alert-warning'))
                   }
                },
                beforeSerialize : function () {
                    var pwd = form.find('input.password');
                    $("#register_pwd").val(md5.hex_md5(pwd.val()));
                }
            }
            _l.submit(form , options);
        });
        $("#login_submit").on("click",function () {
            var form = $(this).parents('form') ;
            var options = {
                success: function (data) {
                    if(data.success) {
                        form.clearForm()
                        window.location.href = "/";
                    } else {
                        var error = form.find('.error_msg');
                        error.html(_l.msgTemp('<strong>账号错误</strong> '+data.message , 'alert-warning'))
                    }
                },
                beforeSerialize : function () {
                    var pwd = form.find('input.password');
                    $("#login_pwd").val(md5.hex_md5(pwd.val()));
                }
            }
            _l.submit(form , options);
        })
    });

    var _l  = {
        msgTemp : function (msg,className) {
            return '<div class="alert '+className+'} alert-dismissible fade in" role="alert">' +
                '<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button>'+msg+'</div>';
        },
        //type 0 - login 1-register
        submit : function (form ,options,type) {
            var loginName = form.find('input.loginName');
            var phone = form.find('input.phone');
            var pwd = form.find('input.password');
            var error = form.find('.error_msg');
            //用户名 判断
            switch (loginName.validateNull()) {
                case 1: error.html(_l.msgTemp('<strong>用户名不能为空</strong> 请输入用户名','alert-warning')); return ;
            }
            if(type == 1) {
                // 验证手机号参考这个
                switch(phone.validatemobile()) {
                    case 1: error.html(_l.msgTemp('<strong>手机号码为空</strong> 请输入手机号码',    'alert-warning')); return; break;
                    case 2: error.html(_l.msgTemp('<strong>手机号码错误</strong> 请输入11位数的号码','alert-warning')); return; break;
                    case 3: error.html(_l.msgTemp('<strong>手机号码错误</strong> 请输入正确的号码',  'alert-warning')); return; break;
                }
            }
            // 验证密码复杂度参考这个
            switch(pwd.validatepwd()) {
                case 1: error.html(_l.msgTemp('<strong>密码不能为空</strong> 请输入密码',    'alert-warning')); return; break;
                case 2: error.html(_l.msgTemp('<strong>密码过短</strong> 请输入6位以上的密码','alert-warning')); return; break;
                case 3: error.html(_l.msgTemp('<strong>密码过于简单</strong><br>密码需为字母、数字或特殊字符组合',  'alert-warning')); return; break;
            }
            form.ajaxSubmit(options);
        }
    }
});

